<?php
/* *
 * 功能：支付宝服务器异步通知页面
 * 版本：3.3
 * 日期：2012-07-23
 * 说明：
 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。


 *************************页面功能说明*************************
 * 创建该页面文件时，请留心该页面文件中无任何HTML代码及空格。
 * 该页面不能在本机电脑测试，请到服务器上做测试。请确保外部可以访问该页面。
 * 该页面调试工具请使用写文本函数logResult，该函数已被默认关闭，见alipay_notify_class.php中的函数verifyNotify
 * 如果没有收到该页面返回的 success 信息，支付宝会在24小时内按一定的时间策略重发通知
 */
define('ROOT_PATH', substr(dirname(__FILE__),0,strlen(dirname(__FILE__))-strlen('service')-1));
include(ROOT_PATH . '/eccore/ecmall.php');
require(ROOT_PATH . '/eccore/model/model.base.php');   //模型基础类

/* 定义配置信息 */
ecm_define(ROOT_PATH . '/data/config.inc.php');
ecm_define(ROOT_PATH . '/data/settings.inc.php');
/* 环境 */
define('CHARSET', substr(LANG, 3));
include_once 'mobilecommon.php';
include_once 'MessageService.php';

require_once("alipay.config.php");
require_once("lib/alipay_notify.class.php");
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();

if($verify_result) {//验证成功
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//请在这里加上商户的业务逻辑程序代


	//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——

	//获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表

	//商户订单号
	$out_trade_no = $_POST['out_trade_no'];

	//支付宝交易号
	$trade_no = $_POST['trade_no'];

	//交易状态
	$trade_status = $_POST['trade_status'];

	$total_fee = $_POST['total_fee'];
	if($_POST['trade_status'] == 'TRADE_FINISHED') {
		order_tb_pay($out_trade_no,$total_fee,$trade_no);
	}
	else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
		order_tb_pay($out_trade_no,$total_fee,$trade_no);
	}

	//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——

	echo "success";		//请不要修改或删除

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else {
	//验证失败
	echo "fail";

	//调试用，写文本函数记录程序运行情况是否正常
	//logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
}

function order_tb_pay($out_trade_no,$total_fee,$trade_no){
	$order=&m("order");
	$orderself=array();
	$sql="select * from yk_order where order_sn='".$out_trade_no."'";

	$orderself=$order->db->getRow($sql);

	$o_tid=$orderself['order_id'];

	if(empty($orderself)){
		$sql="update yk_member_pay set ymp_paytype='支付宝',ymp_outcode='".$trade_no."' where ymp_order='".$o_tid."'";

		$order->db->query($sql);

		$sql="update yk_order set payment_name='支付宝',out_trade_sn='".$trade_no."' where order_id=".$o_tid;
		$order->db->query($sql);

		echo "success";
		exit();
	}
	if($orderself['status']!=11){
		$sql="update yk_member_pay set ymp_paytype='支付宝',ymp_outcode='".$trade_no."' where ymp_order='".$o_tid."'";

		$order->db->query($sql);
		echo "success";
		exit();
	}
	$list=$orderself;

	$score=0;
	$sql="select yp_scale from yk_paytypeorder where yp_name='支付宝'";
	$score=$order->db->getOne($sql);
	if(empty($score)){
		$score=1;
	}

	$ordermoney=0;
	$ordermoney=floatval($list['order_amount']);

	$deduct=0;
	$balancemoney=0;

	$sql="select yp_scale from yk_paytype where yp_name='支付宝'";
	$deduct=$order->db->getOne($sql);
	if(empty($deduct)){
		$deduct=0;
	}
	$balancemoney=$total_fee*(1-$deduct);
	if(empty($balancemoney)||$balancemoney<0){
		$balancemoney=0;
	}

	$sql="update yk_order set status='20',payment_name='支付宝',pay_money='".$total_fee."',pay_time='".gmtime()."' where order_id=".$o_tid;
	$order->db->query($sql);

	if($order->db->affected_rows()){

		$sql="insert into yk_member_pay set ymp_date='".gmtime()."',ymp_status='已支付',
				ymp_order='".$o_tid."',ymp_payuserid='".$list['buyer_id']."',ymp_payuser='".$list['buyer_name']."',ymp_recuserid='".$list['seller_id']."',
				ymp_recuser='".$list['seller_name']."',ymp_money='".$ordermoney."',ymp_paymoney='".$total_fee."',
				ymp_deduct='".$deduct."',ymp_balancemoney='".$balancemoney."',ymp_paytype='支付宝',ymp_outcode='".$trade_no."',ymp_paydate='".gmtime()."'";

		$order->db->query($sql);


		order_progress($o_tid,'待付款','已付款',$list['buyer_id'],'用户已经支付订单');
		if($list['seller_id']){
			send($list['buyer_id'], $list['seller_id'], $list['buyer_name'].'用户已经支付宝支付订单', $o_tid,0,'waiter',"订单");
		}

		$sql="update yk_order set staus='已完成',finish_time='".gmtime()."' where order_id=".$o_tid;
		$order->db->query($sql);
		if($order->db->affected_rows()){

			order_progress($o_tid,'已付款','已完成',$list['buyer_id'],'订单已经完成');
			if($list['seller_id']){
				send($list['buyer_id'], $orderself['seller_id'], $orderself['buyer_name'].'用户已经完成订单', $o_tid,0,'waiter',"订单");
			}
			$sql="select * from yk_member_pay where ymp_status='已支付' and ymp_order=".$o_tid;
			$pay=$order->db->getRow($sql);
			if($pay){
				$pm=floatval($pay['ymp_balancemoney']);
				if($pm){
					if($list['seller_id']){
						$sql="update yk_account set ya_money=ya_money+".$pm.",ya_all=ya_all+".$pm." where ya_tid='".$orderself['seller_id']."'";
						$order->db->query($sql);
					}
				}

				$sql="update yk_member_pay set ymp_status='已完成' where ymp_tid='".$pay['ymp_tid']."'";
				$order->db->query($sql);
			}

			if($list['seller_id']){
				$plussql='';
				if($list['order_type']=='tel'){
					$plussql.=",yd_telconsultnum=yd_telconsultnum+1";
				}
				if($list['order_type']=='plus'){
					$plussql.=",yd_plusnum=yd_plusnum+1";
				}
				if($list['order_type']=='consult'){
					$plussql.=",yd_consultnum=yd_consultnum+1";
				}

				$sql="update yk_doctor set yd_num=yd_num+1 $plussql where user_id='".$list['seller_id']."'";
				$db->query($sql);
			}
		}
	}
}
?>